package com.pronosticnews.server.services;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.pronosticnews.client.services.ChampionnatService;
import com.pronosticnews.server.domain.dao.ChampionnatDao;
import com.pronosticnews.server.domain.dao.PaysDao;
import com.pronosticnews.server.domain.dao.SportDao;
import com.pronosticnews.server.domain.model.Championnat;
import com.pronosticnews.server.domain.model.Pays;
import com.pronosticnews.server.domain.model.Sport;
import com.pronosticnews.shared.model.ChampionnatDto;

import fr.ysa.persistence.DaoException;
import fr.ysa.persistence.IDao;
import fr.ysa.services.ImplService;
import fr.ysa.services.ServiceException;

@Service("championnatService")
@Transactional
public class ChampionnatServiceImpl extends
		ImplService<Championnat, ChampionnatDto> implements ChampionnatService {

	@Autowired
	ChampionnatDao championnatDao;

	@Autowired
	SportDao sportDao;

	@Autowired
	PaysDao paysDao;

	@Override
	public IDao<Championnat> getDao() {
		return championnatDao;
	}

	@Override
	public ChampionnatDto sauvegarder(ChampionnatDto ch) throws ServiceException {
		try {
			if (ch.getPays() == null) {
				throw new ServiceException("Pays ne peut etre nul");
			} else {
				Pays pays = paysDao.trouver(ch.getPays().getId());
				if (pays == null) {
					throw new ServiceException("Pays n'existe pas");
				}
			}
			if (ch.getSport() == null) {
				throw new ServiceException("Sport ne peut etre nul");
			} else {
				Sport sport = sportDao.trouver(ch.getSport().getId());
				if (sport == null) {
					throw new ServiceException("Sport n'existe pas");
				}
			}
			ChampionnatDto championnatSaved = super.sauvegarder(ch);
			return championnatSaved;
		} catch (DaoException e) {
			throw new ServiceException(e.getMessage());
		}
	}

	@Override
	public Class<Championnat> getEntityClass() {
		return Championnat.class;
	}

	@Override
	public Class<ChampionnatDto> getEntityDtoClass() {
		return ChampionnatDto.class;
	}

}
